import Datastore from 'nedb'
import path from 'path'
import { remote } from 'electron'

const ds = new Datastore({
	autoload: true,
	filename: path.join(remote.app.getPath('userData'), '/.abp-vue-coder/data.db')
})

function get(key) {
	return new Promise((resolve, reject) => {
		ds.findOne({ _id: key }, function(err, docs) {
			if (err) {
				console.error(err)
				reject(err)
			}

			resolve(docs.data)
		})
	})
}

function insert(key, value) {
	ds.insert(
		{
			_id: key,
			data: value
		},
		function(err, newDocs) {
			if (err) {
				console.error(err)
				return
			}
		}
	)
}

function update(key, value) {
	ds.update(
		{
			_id: key,
			data: value
		},
		function(err, newDocs) {
			if (err) {
				console.error(err)
				return
			}
		}
	)
}

function set(key, value) {
	get(key).then(res => {
		if (res) {
			update(key, value)
		} else {
			insert(key, value)
		}
	})
}

function remove(key) {
	ds.remove({ _id: key }, function(err, numRemoved) {
		if (err) {
			console.error(err)
			return
		}
	})
}

const db = {
	get,
	set,
	insert,
	update,
	remove
}

export default db
